#ifndef CEMAIL_H
#define CEMAIL_H

#include <QObject>
#include <QtGlobal>
#include <QStringList>
#include <QDateTime>
#include <QDebug>
#include "cvagasmodel.h"
#if defined(USEMOBILITY)
    #include <QMessageManager>
    #include <QMessageService>
#endif
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include "cconfiguracao.h"


#if defined(USEMOBILITY)
QTM_USE_NAMESPACE
#endif

class CEmail : public QObject
{
    Q_OBJECT

    Q_PROPERTY(QString emailPadrao READ getEmailPadrao NOTIFY emailPadraoChanged)
    Q_PROPERTY(QStringList listaEmails READ getListaEmails NOTIFY listaEmailsChanged)
    Q_PROPERTY(QString emailSelecionado READ getEmailSelecionado WRITE setEmailSelecionado NOTIFY emailSelecionadoChanged)

public:
    explicit CEmail(QObject *parent = 0);
    ~CEmail();

    Q_INVOKABLE void EnviarEmails(int codigoVaga, const QString &contaEmailLocal, const QString &mensagem, const QString &curriculo);
    Q_INVOKABLE void EnviarEmails(const QString &contaEmailLocal, const QString &mensagem, const QString &curriculo);
    Q_INVOKABLE void ChecarEmails();
    Q_INVOKABLE void LimparEmails();

    CVagasModel *getVagas();
     void setVagas(CVagasModel *vagas);

private:
    QString _emailSelecionado;
    CVagasModel *_vagas;

    bool GuardarEnvio(CVagasItem *vaga, const QString mensagemEnviadaContato);
    bool EnviarEmailEfetivamente(const QString contaEmailLocal, const QString &mensagem, const QString &curriculo, CVagasItem *vaga);

#if defined(USEMOBILITY)
    QMessageService *_servicoEmail;    
#endif

#if defined(USEMOBILITY)
    QMessageAccountId IdContaEmail(const QString &email);
#endif

    QStringList getListaEmails();
    QString getEmailPadrao();
    QString getEmailSelecionado();

    void setEmailSelecionado(const QString &email);
signals:
    void listaEmailsChanged();
    void emailPadraoChanged();
    void emailSelecionadoChanged();
    void emailsGerados();
    void emailGerado(CVagasItem *v);
    void limpezaVagasContatadas();

private slots:
    
public slots:
    
};

inline QString CEmail::getEmailSelecionado() { return _emailSelecionado; }
inline CVagasModel *CEmail::getVagas() { return _vagas; }

inline void CEmail::setEmailSelecionado(const QString &email) { _emailSelecionado = email; emit emailSelecionadoChanged(); }
inline void CEmail::setVagas(CVagasModel *vagas) { _vagas = vagas; }

#endif // CEMAIL_H
